# -*- coding: utf-8 -*-
"""
-------------------------------------------------
Project Name: luffcity study project
File Name: 作业分析.py
Author: kij
Create Date: 2021/2/8
-------------------------------------------------
"""
"""
有video.csv视频库文件，其中有999条短视频数据，格式如下：【 video.csv 文件已为大家提供好，在day15课件目录下。 】
项目的核心功能有：
分页看新闻（每页显示10条），提示用户输入页码，根据页码显示指定页面的数据。
  - 提示用户输入页码，根据页码显示指定页面的数据。
  - 当用户输入的页码不存在时，默认显示第1页
搜索专区
- 用户输入关键字，根据关键词筛选出所有匹配成功的短视频资讯。
- 支持的搜索两种搜索格式：
   `id=1715025`，筛选出id等于1715025的视频（video.csv的第一列）。
   `key=文本`，模糊搜索，筛选包含关键字的所有新闻（video.csv的第二列）。
下载专区
- 用户输入视频id，根据id找到对应的mp4视频下载地址，然后下载视频到项目的files目录。
   视频的文件名为：`视频id-年-月-日-时-分-秒.mp4`
   视频下载代码示例
import requests

res = requests.get(
    url='https://video.pearvideo.com/mp4/adshort/20210105/cont-1715046-15562045_adpkg-ad_hd.mp4'
)

# 视频总大小（字节）
file_size = int(res.headers['Content-Length'])

download_size = 0
with open('xxx.mp4', mode='wb') as file_object:
    # 分块读取下载的视频文件（最多一次读128字节），并逐一写入到文件中。 len(chunk)表示实际读取到每块的视频文件大小。
    for chunk in res.iter_content(128):
        download_size += len(chunk)
        file_object.write(chunk)
        file_object.flush()
        message = "视频总大小为：{}字节，已下载{}字节。".format(file_size, download_size)
        print(message)
    file_object.close()
res.close()
下载的过程中，输出已下载的百分比，示例代码如下：
import time

print("正在下载中...")
for i in range(101):
    text = "\r{}%".format(i)
    print(text, end="")
    time.sleep(0.2)

print("\n下载完成")
"""
import os
import re
import shutil
import requests

max_num = 100
select_bool = False
all_videos = {}


# 读取当前文件路径，并得到上级文件夹路径，然后拼接文件夹和文件名称 ，得到文件录的绝对路径，
# 文件名或者文件夹名字可以用配置文件来练习导包

def download_video(video_url, save_path):
	"""
	:param video_url:下载电影的在线路径
	:param save_path:下载到本地路径
	:return: 下载成功或者下载进度
	"""
	print("欢迎来到下载专区".center(50, "*"))
	pass


# 查找文件路径
def get_file_path(file_name):
	"""
	:param file_name:文件名字
	:return: 返回文件路径
	"""
	return os.path.join(os.path.dirname(os.path.abspath(__file__)), "files", file_name)


# 搜索文件
def search_video(*args):
	if args[0].isdecimal():
		print("按电影id搜索")

		if args[0] in all_videos['id']:
			print(all_videos['key'][all_videos['id'].index(args[0])])
			# download_file(user_name=all_videos['key'][all_videos['id'].index(args[0])],file_url=all_videos['url'][all_videos['id'].index(args[0])])

	# 下载电影
	elif args[0].upper() == "Y":
		download_video("", "")
	# 模糊搜索
	else:
		print("按y跳转下载专区")


def download_file(file_url, user_name):
	print(user_name,file_url)
	res = requests.get(
		url=file_url,
		headers={
			"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
		}
	)
	if not os.path.exists(get_file_path("videos")):
		# 创建文件路径
		os.makedirs(get_file_path("videos"))
	with open(get_file_path("videos/{}.mp4".format(user_name)), mode="wb") as img_object:
		# 拿到字节数据然后写入
		img_object.write(res.content)

# 根据页码搜索文件并打印
def show_videos_by_page():
	while True:
		# 输入数字来进行查找数据
		select = input("请输入你的选择:").strip()
		# 是数字 查看是否在列表范围内
		if not select.isdecimal() and select.upper() == "Q":
			break
		elif select.isdecimal() and int(select) <= max_num:
			print("进行分页显示新闻".center(50, "*"))
			num = int(select)
			for item in all_videos['key'][(num - 1) * 10:num * 10]:
				print(item)
		else:
			search_video(select)


# 加载文件
def loading_file():
	with open(get_file_path("video.csv"), mode='r', encoding='utf-8') as file_videos:
		for line in file_videos:
			# 得到视频地址和id前半段
			video_id = line.strip().split("http")
			# 得到id后再截取视频内容
			video_name = video_id[0].split(",")
			if not "id" in all_videos:
				all_videos.setdefault("id", [video_name[0]])
			else:
				all_videos.get("id").append(video_name[0])

			if not "key" in all_videos:
				all_videos.setdefault("key", ["".join(video_name[1:])])
			else:
				all_videos.get("key").append("".join(video_name[1:]))

			if not "url" in all_videos:
				all_videos.setdefault("url", ["http{}".format(video_id[1])])
			else:
				all_videos.get("url").append("http{}".format(video_id[1]))


def print_hi(hint):
	loading_file()
	print(hint)
	show_videos_by_page()


if __name__ == '__main__':
	print_hi('看新闻'.center(50, "*"))
